import Mock from 'mockjs'
import { Local } from '../utils/storage'
import { ADMIN_ACCOUNT } from '../stores/constant/cacheKey'

/** 根据运行环境获取 基础请求 Url */
const getBaseUrl = () => {
    const value: string = import.meta.env.VITE_AXIOS_BASE_URL;
    return value;
}

// 设置延迟响应时间（可选）
Mock.setup({
    timeout: '200-600'  // 模拟请求延迟 200ms 至 600ms
});

// 管理员登录
Mock.mock(`${getBaseUrl()}/api/admin/login`, 'post', (options) => {
    const body = JSON.parse(options.body);
    if (body.name && body.password) {
        if (body.name !== 'admin' || body.password !== '123456') {

            let result: resultModel = {
                code: -1,
                message: '登录账户或密码不正确，请检查重新填写'
            };

            return result;
        }
    }

    let result: resultModel = {
        code: 0,
        message: 'ok',
        data: {
            id: 1,
            name: body.name + new Date().getMilliseconds()
        }
    }

    return result;
});

// 管理系统 - 基础数据
Mock.mock(`${getBaseUrl()}/api/admin/index`, 'post', (options) => {

    if (options.body) {
        const body = JSON.parse(options.body);
    }

    const authToken = getAuthToken();
    if (!authToken) {
        let result: resultModel = {
            code: -1,
            message: '安全参数无效，请退出重新登录'
        }

        return result;
    }

    let result: resultModel = {
        code: 0,
        message: 'ok',
        data: {

            adminInfo: {
                id: 1,
                name: 'admin',
                avatar: 'logo.png',
                lastLoginTime: '2025-05-13 17:54:55',
                super: true
            },

            menus: [{
                id: 2,
                menuType: 'menu',
                title: '系统管理',
                icon: '',
                routerPath: '',
                componentPath: '',
                permission: '',
                moduleName: '',
                children: [{
                    id: 3,
                    menuType: 'menu',
                    title: '管理员',
                    icon: '',
                    routerPath: '/admin/manage/admin/',
                    componentPath: '/src/views/modules/manage/admin/list.vue',
                    permission: '',
                    moduleName: 'adminList',
                    children: [
                        {
                            id: 5,
                            menuType: 'btn',
                            title: '编辑',
                            icon: '',
                            routerPath: '',
                            componentPath: '',
                            permission: 'admin:edit',
                            moduleName: ''
                        }
                    ]
                }, {
                    id: 4,
                    menuType: 'menu',
                    title: '角色',
                    icon: '',
                    routerPath: '/admin/manage/role/',
                    componentPath: '/src/views/modules/manage/role/list.vue',
                    permission: '',
                    moduleName: 'roleList'
                },
                ],
            }, {
                id: 9,
                menuType: 'menu',
                title: '系统配置',
                icon: '',
                routerPath: '/admin/base/systemconfig/',
                componentPath: '/src/views/modules/base/systemconfig/list.vue',
                permission: '',
                moduleName: 'systemConfigList',
                children: []
            }]
        }
    };

    return result;
});

// 管理员列表接口
Mock.mock(`${getBaseUrl()}/api/admin/list`, 'post', () => {
    const list = Mock.mock({
        // 生成1到10条随机用户数据
        'list|10': [{
            'id|+1': 1,             // 自增ID，从 1 开始
            'date': '@date',        // 生成日期字符串（随机）
            'name': '@cname',       // 使用占位符生成中文名（随机）
            'age|15-25': 1,         // 15-25岁随机年龄
            'city': '@county(true)' // 省市县组合（随机）
        }]
    });

    let result: resultModel = {
        code: 0,
        message: 'ok',
        data: JSON.stringify(list.list, null, 4)
    };

    return result;
})

// 捕获所有 get 请求
Mock.mock('/.*/', 'get', (options) => {
    console.log('Mock 实例配置', options);
    return { code: 200, message: 'Mock 请求返回' }
});

/** 接口返回模型 */
interface resultModel {
    /** 状态代码。默认：0（接口执行完成） */
    code: number
    /** 接口返回消息。默认：ok */
    message: string
    /** 返回数据 */
    data?: Object
}

/** 获取登录认证 Token */
const getAuthToken = () => {
    return Local.get(ADMIN_ACCOUNT);
}